package com.Annotation;

import org.junit.Test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 注解的应用场景：模拟Junit框架
 * 1.自定义一个Mytest注解
 * 2.要是使用了Mytest注解就可以执行
 */
public class AnnotationDemo4 {
    /**
     * 2.要是使用了Mytest注解就可以执行
     */
    @Mytest
    public void test1(){
        System.out.println("=========test1=========");
    }
    public void test2(){
        System.out.println("=========test2=========");
    }
    @Mytest
    public void test3(){
        System.out.println("=========test3=========");
    }

    public static void main(String[] args) throws Exception {
        AnnotationDemo4 a=new AnnotationDemo4();
        //获取类对象
        Class c=AnnotationDemo4.class;
        //获取类中的全部方法
        Method[] declaredMethods = c.getDeclaredMethods();
        //遍历方法
        for (Method method : declaredMethods) {
            //判断方式是否有注解
            if (method.isAnnotationPresent(Mytest.class)){
                //执行方法（需要创建一个AnnotationDemo4对象，这样才知道是执行AnnotationDemo4里面的方法）
                method.invoke(a);
            }
            //=========test3=========
            //=========test1=========


        }
    }

}


/**
 * 1.自定义一个Mytest注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Mytest{

}
